package entities;

import java.awt.Color;

import view.JPanelCrianca;
import view.WindowMain;

public class Crianca extends Thread {

	private String id;
	private int tempoBrincando;
	private int tempoDescansando;
	private boolean temBola;
	private int pos;
	private JPanelCrianca painel;

	public Crianca(String id, int tempoBrincando, int tempoDescansando,
			boolean temBola, int pos) {
		this.id = id;
		this.tempoBrincando = tempoBrincando;
		this.tempoDescansando = tempoDescansando;
		this.temBola = temBola;
		this.pos = pos;
	}

	public void run() {

		try {
			while (true) {

				if (temBola) {
					brincar();
				} else {
					Controle.bolasDentro.acquire();
					Controle.mutex.acquire();
					//muda bolas no cesto.
					WindowMain.Cestos.get(Cesto.bolas).setVisible(false);
					Cesto.bolas--;
					WindowMain.Cestos.get(Cesto.bolas).setVisible(true);
					WindowMain.labelCesto.setText("Bolas: "+Cesto.bolas);
					Controle.espacosLivres.release();
					Controle.mutex.release();
					temBola = true;
					brincar();
				}
				Controle.espacosLivres.acquire();
				Controle.mutex.acquire();
				WindowMain.Cestos.get(Cesto.bolas).setVisible(false);
				Cesto.bolas++;
				WindowMain.Cestos.get(Cesto.bolas).setVisible(true);
				WindowMain.labelCesto.setText("Bolas: "+Cesto.bolas);
				Controle.mutex.release();
				Controle.bolasDentro.release();
				temBola = false;

				descansar();
			}
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public int getPos() {
		return pos;
	}

	public void setPos(int pos) {
		this.pos = pos;
	}

	public void brincar() {
		try {
			Controle.mutexLog.acquire();
			WindowMain.lbCriancas[pos].setBackground(Color.GREEN);
			WindowMain.log.setText("A criança "+ getIdCrianca() +" está brincando.\n"+WindowMain.log.getText());
			Controle.mutexLog.release();
			long tempo = System.currentTimeMillis() + tempoBrincando*1000;
			int i = 0;
			while(System.currentTimeMillis() < tempo){
				WindowMain.lbCriancas[pos].setText(getIdCrianca()+" - "+Long.toString((tempo - System.currentTimeMillis()) / 1000));
				painel.mudarEstadoBrincando(tempo - System.currentTimeMillis() / 500);
				i++;
			}
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

	public void descansar() {
		try {
			Controle.mutexLog.acquire();
			WindowMain.lbCriancas[pos].setBackground(Color.RED);
			WindowMain.log.setText("A criança "+ getIdCrianca() +" está descansando.\n"+WindowMain.log.getText());
			Controle.mutexLog.release();
			long tempo = System.currentTimeMillis() + tempoDescansando*1000;
			int i = 0;
			while(System.currentTimeMillis() < tempo){
				WindowMain.lbCriancas[pos].setText(getIdCrianca()+" - "+Long.toString((tempo - System.currentTimeMillis()) / 1000));
				painel.mudarEstadoDescansando(tempo - System.currentTimeMillis() / 500);
				i++;
			}
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
	public String getIdCrianca() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public int getTempoBrincando() {
		return tempoBrincando;
	}

	public void setTempoBrincando(int tempoBrincando) {
		this.tempoBrincando = tempoBrincando;
	}

	public int getTempoDescansando() {
		return tempoDescansando;
	}

	public void setTempoDescansando(int tempoDescansando) {
		this.tempoDescansando = tempoDescansando;
	}

	public boolean TemBola() {
		return temBola;
	}

	public void setTemBola(boolean temBola) {
		this.temBola = temBola;
	}

	public JPanelCrianca getPainel() {
		return painel;
	}

	public void setPainel(JPanelCrianca painel) {
		this.painel = painel;
	}

}
